<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Transport | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="settings.html" title="Configuring Elasticsearch">
<link rel="prev" href="transform-settings.html" title="Transforms settings in Elasticsearch">
<link rel="next" href="modules-threadpool.html" title="Thread pools">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="setup.html">Set up Elasticsearch</a></span>
»
<span class="breadcrumb-link"><a href="settings.html">Configuring Elasticsearch</a></span>
»
<span class="breadcrumb-node">Transport</span>
</div>
<div class="navheader">
<span class="prev">
<a href="transform-settings.html">« Transforms  settings in Elasticsearch</a>
</span>
<span class="next">
<a href="modules-threadpool.html">Thread pools »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="modules-transport"></a>Transport<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h2>
</div></div></div>
<p>The transport networking layer is used for internal communication between nodes
within the cluster. Each call that goes from one node to the other uses
the transport layer (for example, when an HTTP GET request is processed
by one node, and should actually be processed by another node that holds
the data). The transport module is also used for the <code class="literal">TransportClient</code> in the
Elasticsearch Java API.</p>
<p>The transport mechanism is completely asynchronous in nature, meaning
that there is no blocking thread waiting for a response. The benefit of
using asynchronous communication is first solving the
<a href="http://en.wikipedia.org/wiki/C10k_problem" class="ulink" target="_top">C10k problem</a>, as well as
being the ideal solution for scatter (broadcast) / gather operations such
as search in Elasticsearch.</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="transport-settings"></a>Transport settings<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The internal transport communicates over TCP. You can configure it with the
following settings:</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Setting</th>
<th align="left" valign="top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.port</code></p></td>
<td align="left" valign="top"><p>A bind port range. Defaults to <code class="literal">9300-9400</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.publish_port</code></p></td>
<td align="left" valign="top"><p>The port that other nodes in the cluster
should use when communicating with this node. Useful when a cluster node
is behind a proxy or firewall and the <code class="literal">transport.port</code> is not directly
addressable from the outside. Defaults to the actual port assigned via
<code class="literal">transport.port</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.bind_host</code></p></td>
<td align="left" valign="top"><p>The host address to bind the transport service to. Defaults to <code class="literal">transport.host</code> (if set) or <code class="literal">network.bind_host</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.publish_host</code></p></td>
<td align="left" valign="top"><p>The host address to publish for nodes in the cluster to connect to. Defaults to <code class="literal">transport.host</code> (if set) or <code class="literal">network.publish_host</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.host</code></p></td>
<td align="left" valign="top"><p>Used to set the <code class="literal">transport.bind_host</code> and the <code class="literal">transport.publish_host</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.connect_timeout</code></p></td>
<td align="left" valign="top"><p>The connect timeout for initiating a new connection (in
time setting format). Defaults to <code class="literal">30s</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.compress</code></p></td>
<td align="left" valign="top"><p>Set to <code class="literal">true</code> to enable compression (<code class="literal">DEFLATE</code>) between
all nodes. Defaults to <code class="literal">false</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.ping_schedule</code></p></td>
<td align="left" valign="top"><p>Schedule a regular application-level ping message
to ensure that transport connections between nodes are kept alive. Defaults to
<code class="literal">5s</code> in the transport client and <code class="literal">-1</code> (disabled) elsewhere. It is preferable
to correctly configure TCP keep-alives instead of using this feature, because
TCP keep-alives apply to all kinds of long-lived connections and not just to
transport connections.</p></td>
</tr>
</tbody>
</table>
</div>
<p>It also uses the common
<a class="xref" href="modules-network.html" title="Network settings">network settings</a>.</p>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="transport-profiles"></a>Transport profiles<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h4>
</div></div></div>
<p>Elasticsearch allows you to bind to multiple ports on different interfaces by
the use of transport profiles. See this example configuration</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">transport.profiles.default.port: 9300-9400
transport.profiles.default.bind_host: 10.0.0.1
transport.profiles.client.port: 9500-9600
transport.profiles.client.bind_host: 192.168.0.1
transport.profiles.dmz.port: 9700-9800
transport.profiles.dmz.bind_host: 172.16.1.2</pre>
</div>
<p>The <code class="literal">default</code> profile is special. It is used as a fallback for any other
profiles, if those do not have a specific configuration setting set, and is how
this node connects to other nodes in the cluster.</p>
<p>The following parameters can be configured on each transport profile, as in the
example above:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">port</code>: The port to bind to
</li>
<li class="listitem">
<code class="literal">bind_host</code>: The host to bind
</li>
<li class="listitem">
<code class="literal">publish_host</code>: The host which is published in informational APIs
</li>
<li class="listitem">
<code class="literal">tcp.no_delay</code>: Configures the <code class="literal">TCP_NO_DELAY</code> option for this socket
</li>
<li class="listitem">
<code class="literal">tcp.keep_alive</code>: Configures the <code class="literal">SO_KEEPALIVE</code> option for this socket
</li>
<li class="listitem">
<code class="literal">tcp.keep_idle</code>: Configures the <code class="literal">TCP_KEEPIDLE</code> option for this socket, which
determines the time in seconds that a connection must be idle before
starting to send TCP keepalive probes.
Only applicable on Linux and Mac, and requires JDK 11 or newer.
Defaults to -1, which does not set this option at the socket level, but
uses default system configuration instead.
</li>
<li class="listitem">
<code class="literal">tcp.keep_interval</code>: Configures the <code class="literal">TCP_KEEPINTVL</code> option for this socket,
which determines the time in seconds between sending TCP keepalive probes.
Only applicable on Linux and Mac, and requires JDK 11 or newer.
Defaults to -1, which does not set this option at the socket level, but
uses default system configuration instead.
</li>
<li class="listitem">
<code class="literal">tcp.keep_count</code>: Configures the <code class="literal">TCP_KEEPCNT</code> option for this socket, which
determines the number of unacknowledged TCP keepalive probes that may be
sent on a connection before it is dropped.
Only applicable on Linux and Mac, and requires JDK 11 or newer.
Defaults to -1, which does not set this option at the socket level, but
uses default system configuration instead.
</li>
<li class="listitem">
<code class="literal">tcp.reuse_address</code>: Configures the <code class="literal">SO_REUSEADDR</code> option for this socket
</li>
<li class="listitem">
<code class="literal">tcp.send_buffer_size</code>: Configures the send buffer size of the socket
</li>
<li class="listitem">
<code class="literal">tcp.receive_buffer_size</code>: Configures the receive buffer size of the socket
</li>
</ul>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="long-lived-connections"></a>Long-lived idle connections<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h4>
</div></div></div>
<p>Elasticsearch opens a number of long-lived TCP connections between each pair of
nodes in the cluster, and some of these connections may be idle for an extended
period of time. Nonetheless, Elasticsearch requires these connections to remain
open, and it can disrupt the operation of the cluster if any inter-node
connections are closed by an external influence such as a firewall. It is
important to configure your network to preserve long-lived idle connections
between Elasticsearch nodes, for instance by leaving <code class="literal">tcp.keep_alive</code> enabled
and ensuring that the keepalive interval is shorter than any timeout that might
cause idle connections to be closed, or by setting <code class="literal">transport.ping_schedule</code> if
keepalives cannot be configured.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="request-compression"></a>Request compression<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h4>
</div></div></div>
<p>By default, the <code class="literal">transport.compress</code> setting is <code class="literal">false</code> and network-level
request compression is disabled between nodes in the cluster. This default
normally makes sense for local cluster communication as compression has a
noticeable CPU cost and local clusters tend to be set up with fast network
connections between nodes.</p>
<p>The <code class="literal">transport.compress</code> setting always configures local cluster request
compression and is the fallback setting for remote cluster request compression.
If you want to configure remote request compression differently than local
request compression, you can set it on a per-remote cluster basis using the
<a class="xref" href="modules-remote-clusters.html#remote-cluster-settings" title="Remote cluster settings for all modes"><code class="literal">cluster.remote.${cluster_alias}.transport.compress</code> setting</a>.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="response-compression"></a>Response compression<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h4>
</div></div></div>
<p>The compression settings do not configure compression for responses. Elasticsearch will
compress a response if the inbound request was compressed—​even when compression
is not enabled. Similarly, Elasticsearch will not compress a response if the inbound
request was uncompressed—​even when compression is enabled.</p>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="transport-tracer"></a>Transport tracer<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/transport.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The transport layer has a dedicated tracer logger which, when activated, logs incoming and out going requests. The log can be dynamically activated
by setting the level of the <code class="literal">org.elasticsearch.transport.TransportService.tracer</code> logger to <code class="literal">TRACE</code>:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
   "transient" : {
      "logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/34.console"></div>
<p>You can also control which actions will be traced, using a set of include and exclude wildcard patterns. By default every request will be traced
except for fault detection pings:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
   "transient" : {
      "transport.tracer.include" : "*",
      "transport.tracer.exclude" : "internal:coordination/fault_detection/*"
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/35.console"></div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="transform-settings.html">« Transforms  settings in Elasticsearch</a>
</span>
<span class="next">
<a href="modules-threadpool.html">Thread pools »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
